home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / ab20 / ab20_archive / utilities / emulators / unixlib.lzh / mktemp.c < prev    next >
C/C++ Source or Header  |  1991-10-19  |  1KB  |  32 lines

  1. /* This function should return an unique string, I don't know how I can
  2.  * do that. The last try was wrong, it caused the parser to hang when
  3.  * starting telnet. With an 68000 it happened not often, but with a faster
  4.  * processor it happeded very often :+(
  5.  * But now I think it will work, this function is called by telnet and the
  6.  * parser, so let them both provide a template to which we shall append
  7.  * some string. The template must be large enough !!! The only problem left
  8.  * is what to do with 2 (or more) clients looking for a free name at the same
  9.  * time. Is Forbid()/Enable() enough or should I use semaphores ? The entire
  10.  * code until the port is in the list should be in the Forbid/Enable !!
  11.  */
  12.  
  13. #include <stdio.h>
  14.  
  15. char *mktemp(char *template) {
  16.     static int count = 0;
  17.     char *tmp;
  18.  
  19.     if(strlen(template) < 10 )    /* Too short !! */
  20.     return NULL;
  21.     tmp = template + strlen(template) - 8;
  22.     sprintf(tmp, "%08x", count);
  23.  
  24.     Forbid();    /* Let no-one change the list while we are scanning it ! */
  25.     while(FindPort(template)) {
  26.     count++;
  27.     sprintf(tmp, "%08x", count);
  28.     }
  29.     Permit();
  30.     return template;
  31. }
  32.